延續昨天的事件監聽,一開始花了滿多時間在認識各個事件的使用方式,特別在後續專案實作上,認識更多的執行方式。不過對於基礎觀念不花費心力來理解它,永遠就是會弄不清楚,其中冒泡事件就是其中之一,從剛開始進入 JS 實作時,總是會不太清楚為什麼這裡要下 event.stopPropagation()
,總以為是必須要寫上的,直到學習到冒泡事件 (Event Bubbling)才知道用意啊~
ul
> li
的列表來介紹綁定監聽事件,並以情況說明會發生什麼問題,該如何「捕獲」或「冒泡」特性來修正,藉此也可以深刻記得未來在做類似的功能時,要注意哪些地方。var button = document.querySelector('.btn');
button.addEventListener('click',function(e){
alert('Hello this is button');
},false)
<td>
。<td>
被點擊時,事件會冒泡往上執行。box-3 is clicked
box-1 is clicked!
<div id="box-1">
<h2>box-1</h2>
<div id="box-2">
<h2>box-2</h2>
<div id="box-3">
<h2>box-3</h2>
</div>
</div>
</div>
<script>
$(function () {
// 點擊3時,2也會觸發(這就是冒泡事件的特性),所以必須要停止冒泡行為,否則它會一直往上觸發。
//他的順序是固定的3->2->1,從最裡面開始
$('#box-3').click(function () {
console.log("box-3 is clicked!");
});
$('#box-2').click(function () {
console.log("box-2 is clicked!");
})
$('#box-1').click(function () {
console.log("box-1 is clicked!");
})
})
</script>
e.stopPropagation()
#box-3
,並設定阻止冒泡的行為發生,就可以發現他只會出現 box-3 is clicked! $('#box-3').click(function (event) {
//阻止冒泡的行為發生
event.stopPropagation();
console.log("box-3 is clicked!");
});
參考資料:
[第七週] DOM - 事件傳遞機制:捕獲與冒泡、事件代理
重新認識 JavaScript: Day 14 事件機制的原理
DOM 的事件傳遞機制:捕獲與冒泡